package com.wcx.replace_img;

import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Demo1 {
    //原md文件的本地 全路径
    public static final String OLD_MD_FILE_ALL_PATH = "C:\\Users\\wcx\\Desktop\\test\\01-环境搭建、SpringCloud微服务(注册发现、服务调用、网关).md";

    //原md文件的本地图片路径开头字符串
//    private static final String IMG_DIR_HEAD_PATH = "assets/image-";
    private static final String IMG_DIR_HEAD_PATH = "01-环境搭建、SpringCloud微服务(注册发现、服务调用、网关).assets";

    //有道图片md文件的本地地址 全路径地址
    public static final String MD_FILE_ALL_PATH = "C:\\Users\\wcx\\Desktop\\test\\无标题Markdown.md";

    //目标新文件全路径地址
    public static final String TARGET_NEW_FILE_ALL_PATH = "C:\\Users\\wcx\\Desktop\\test\\new.md";


    //获取有道图片url集合
    public static List<String> youdaoImgList;

    public static void main(String[] args) throws IOException {

        try {
            //获取有道图片url集合
            youdaoImgList = getYoudaoImgList(MD_FILE_ALL_PATH);
        } catch (IOException e) {
            System.out.println("有道云图片url的md文件不存在。");
            e.printStackTrace();
        }

        //读 原文件的图片相对路径
        BufferedReader bufferedReader1 = new BufferedReader(new InputStreamReader(
                new FileInputStream(OLD_MD_FILE_ALL_PATH), "utf8"));

        //创建一个输出流
        BufferedWriter bufferedWriter1 = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream(TARGET_NEW_FILE_ALL_PATH), "utf8"));


        //每个原文件的图片本地相对路径
        String oneLine = null;
        //记录有多少张图片
        int imgTotal = 0;
        while ((oneLine = bufferedReader1.readLine()) != null) {
            if (oneLine.contains(IMG_DIR_HEAD_PATH)) {
                //把原文件图片 这行打印出来
                System.out.println(oneLine);
                //判断原文件的图片 是否合法 是否被包含在 有道图片md文件
                String oneLineResult = checkOldUrlExist(oneLine);

                //写一行 有道云图片的内容
                bufferedWriter1.write(oneLineResult);
                //换行
                bufferedWriter1.newLine();

                //记录一次 图片总数
                imgTotal++;
            } else {
                //写一行 非图片的内容
                bufferedWriter1.write(oneLine);
                //换行
                bufferedWriter1.newLine();
            }
        }

        //打印图片总数量 是为了不让 图片数量偏差过于离谱
        System.out.println(imgTotal + "张图片");
        //释放资源
        bufferedReader1.close();
        bufferedWriter1.close();


    }

    /**
     * 判断这一行 合法吗
     * 是否存在多行图片
     *
     * @param oneLine
     * @return
     */
    private static String checkOldUrlExist(String oneLine) {
        //超找原文件 图片文件名
        String imgFileName = "";

//        Pattern pattern = Pattern.compile("[0-9]{17,18}");
        Pattern pattern = Pattern.compile("[0-9a-zA-Z]{13,32}");
        Matcher matcher = pattern.matcher(oneLine);
        if (matcher.find()) {
            imgFileName = matcher.group(0);
            System.out.println("查找原文件的文件名 结果:" + imgFileName);
        } else {
            imgFileName = oneLine;
            System.out.println("注意 这里取不到图片名 :" + oneLine);
        }

        //遍历有道云图片url地址
        for (int i = 0; i < youdaoImgList.size(); i++) {
            //判断 原文件中的图片 是否存在于 有道云图片list中
            boolean existImgFile = youdaoImgList.get(i).contains(imgFileName);
            if (existImgFile) {
                System.out.println("替换一个");
                return youdaoImgList.get(i);
            }
        }

        System.out.println("未替换");
        return oneLine;

    }

    /**
     * 获取有道图片url集合
     *
     * @return
     * @throws IOException
     */
    private static List<String> getYoudaoImgList(String mdFileAllPath) throws IOException {
        //读 有道上的图片地址
        BufferedReader bufferedReader2 = new BufferedReader(
                new InputStreamReader(
                        new FileInputStream(mdFileAllPath),
                        "utf8"));

        //每个有道上的图片地址一行
        String youdaoOneLine = null;
        //存进集合
        ArrayList<String> list = new ArrayList<>();
        while ((youdaoOneLine = bufferedReader2.readLine()) != null) {
            System.out.println(youdaoOneLine);
            //存进集合
            list.add(youdaoOneLine);
        }

        //释放资源
        bufferedReader2.close();
        return list;
    }
}
